package com.own.component.autoconfig.property.token;

import com.own.constant.ConstantValue;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.Map;

/**
 * TokenProperty
 *
 * @author chenxueli
 * @date 2023-11-07 19:49:39
 */
@Data
@SpringBootConfiguration
@ConfigurationProperties(prefix = TokenProperty.PREFIX)
public class TokenProperty {

    public static final String PREFIX = ConstantValue.CONFIG_VALUE_CONTENT + "token";

    private static final TokenPolicy DEFAULT_POLICY = TokenPolicy.OVERRIDE_CLIENT;
    private static final Long DEFAULT_TIMEOUT = 7200000L;
    private static final Long DEFAULT_AUTO_LOGIN_EFFECTIVE_TIME = 6600000L;
    private static final Long DEFAULT_AUTO_LOGIN_TIME_OUT = 2592000000L;

    /**
     * 默认的客户端名称
     */
    private String defaultClient = "web";

    /**
     * 客户端列表
     */
    private String[] clientArray = {"web"};

    /**
     * 默认登录策略
     */
    private TokenPolicy policy = DEFAULT_POLICY;

    /**
     * 登录超时时间
     */
    private Long timeout = DEFAULT_TIMEOUT;

    /**
     * 自动登录开始生效的时间
     */
    private Long autoLoginEffectiveTime = DEFAULT_AUTO_LOGIN_EFFECTIVE_TIME;

    /**
     * 自动登录开始生效的时间
     */
    private Long autoLoginTimeout = DEFAULT_AUTO_LOGIN_TIME_OUT;

    /**
     * token请求携带的字段
     */
    private String tokenRequestField = "token";

    /**
     * token响应携带的字段
     */
    private String TokenResponseField = "token";

    /**
     * 多源配置（针对不同的客户端自定义）
     */
    private Map<String, ClientProperty> multiple;

    @Slf4j
    @Data
    @Accessors(chain = true)
    public static class ClientProperty {

        /**
         * 登录策略
         */
        private TokenPolicy policy = DEFAULT_POLICY;

        /**
         * 登录超时时间
         */
        private Long timeout = DEFAULT_TIMEOUT;

        /**
         * 自动登录开始生效的时间
         */
        private Long autoLoginEffectiveTime = DEFAULT_AUTO_LOGIN_EFFECTIVE_TIME;

        /**
         * 自动登录开始生效的时间
         */
        private Long autoLoginTimeout = DEFAULT_AUTO_LOGIN_TIME_OUT;

    }

}
